package com.hiyee.cart.aop;

import com.hiyee.cart.repository.CartRepository;
import com.hiyee.pojo.Cart;
import com.hiyee.pojo.auth.LoginCustomer;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 对使用购物车进行前置操作，校验购物车是否存在，不存在则自动创建空的购物车 切面类
 *
 * @author WangBin
 */
@Aspect
@Component
public class CreateEmptyCartAOP {

    @Autowired
    private CartRepository cartRepo;

    /**
     * 定义切入点
     */
    @Pointcut("@annotation(com.hiyee.annotation.CreateEmptyCart)")
    private void createEmptyCartAop() {}

    /**
     * 前置切面
     *
     * @param JoinPoint joinPoint
     */
    @Before("createEmptyCartAop() && args(loginCustomer)")
    public void before(JoinPoint joinPoint, LoginCustomer loginCustomer) {
        System.out.println("[AOP] 进入空购物车校验切面");
        if(loginCustomer.getCustomerId() != null) {
            // 查询客户是否有购物车
            Cart cart = cartRepo.getByCustomerId(loginCustomer.getCustomerId());
            if(cart == null) {
                // 自动创建空的购物车
                cartRepo.createEmptyCart(loginCustomer.getCustomerId());
            }
        }
    }
}
